package dto

type ChannelCode string

const (
	DefaultChannel ChannelCode = ""
	Hkp            ChannelCode = "100550023 HkpPay"
)

// ================= Pay Start =========================

type PayRequestDto struct {
	Order       DepositOrder
	UserAccount UserAccount

	Channel  ChannelConf
	Merchant ChannelMerchant
}

type ChannelConf struct {
	Channel    ChannelCode `json:"channel"`
	Url        string      `json:"url"`
	PrivateKey string      `json:"private_key"`
	SecretKey  string      `json:"secret_key"`
	ReturnUrl  string      `json:"return_url"`
	NotifyUrl  string      `json:"notify_url"`
	PublicKey  string      `json:"public_key"`
}

type ChannelMerchant struct {
	MerchantId string `json:"merchant_id"`
	AppId      string `json:"app_id"`
	AppCode    string `json:"app_code"`
}

type DepositOrder struct {
	OrderNumber string `json:"order_number"`
	Amount      string `json:"amount"`
}

type UserAccount struct {
	ClientIp string `json:"client_ip"`
}

// ----------------------------------

type PayResponseDto struct {
	OrderNumber   string `json:"order_number"`   // 支付订单号
	ChannelNumber string `json:"channel_number"` // 通道商支付订单号
	PayUrl        string `json:"pay_url"`        // 通道商支付地址
	IsEnd         bool   `json:"is_end"`         // 是否支付完成
	Ext           any    `json:"ext"`            // 扩展参数
}

// ==================Pay  END =========================

type PayNotifyReqDto struct {
	Header   string `json:"header"`
	Body     string `json:"body"`
	Channel  ChannelConf
	Merchant ChannelMerchant
}

type PayNotifyRespDto struct {
	OrderNumber   string `json:"order_number"`   // 支付订单号
	ChannelNumber string `json:"channel_number"` // 通道商支付订单号
	Amount        string `json:"amount"`         // 金额
	Currency      string `json:"currency"`       // 币种
	Status        string `json:"status"`         // 第三方订单状态
	Ext           any    `json:"ext"`            // 扩展参数
}

type WithdrawRequestDto struct {
	Order       WithdrawOrder
	UserAccount UserAccount
	BankAccount Bank
	PixAccount  Pix

	Channel  ChannelConf
	Merchant ChannelMerchant
}

type WithdrawOrder struct {
	DepositOrder
}

type Bank struct {
	BankCode       string `json:"bank_code"`        // 银行编码
	AccountNo      string `json:"account_no"`       // 账号
	AccountName    string `json:"account_name"`     // 账户名
	BranchBankNo   string `json:"branch_bank_no"`   // 支行号码
	BranchBankName string `json:"branch_bank_name"` // 支行名称
}

type Pix struct {
	AccountType    string `json:"account_type"`     // 账户类型
	AccountNo      string `json:"account_no"`       // 账号
	AccountName    string `json:"account_name"`     // 账户名
	AccountMobile  string `json:"account_mobile"`   // 手机号码
	AccountEmail   string `json:"account_email"`    // 邮箱
	BankCode       string `json:"bank_code"`        // 银行编码
	BranchBankNo   string `json:"branch_bank_no"`   // 支行号码
	BranchBankName string `json:"branch_bank_name"` // 支行名称
	CPF            string `json:"cpf"`
	IFSC           string `json:"ifsc"`
}

type WithdrawResponseDto struct {
	WithdrawNumber string `json:"withdraw_number"` // 支付订单号
	ChannelNumber  string `json:"channel_number"`  // 通道商提现订单号
	Ext            any    `json:"ext"`             // 扩展参数
}

type WithdrawNotifyReqDto struct {
	Header   string `json:"header"`
	Body     string `json:"body"`
	Channel  ChannelConf
	Merchant ChannelMerchant
}

type WithdrawNotifyRespDto struct {
	OrderNumber   string `json:"order_number"`   // 支付订单号
	ChannelNumber string `json:"channel_number"` // 通道商支付订单号
	Amount        string `json:"amount"`         // 金额
	Currency      string `json:"currency"`       // 币种
	Status        string `json:"status"`         // 第三方订单状态
	Ext           any    `json:"ext"`            // 扩展参数
}
